using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using Marimo.複雑なストップウォッチ.Model;
using System;
using System.Windows.Input;
using System.ComponentModel;
using System.Collections.ObjectModel;

namespace Marimo.複雑なストップウォッチ.ViewModel
{
    /// <summary>
    /// This class contains properties that the main View can data bind to.
    /// <para>
    /// Use the <strong>mvvminpc</strong> snippet to add bindable properties to this ViewModel.
    /// </para>
    /// <para>
    /// You can also use Blend to data bind with the tool's support.
    /// </para>
    /// <para>
    /// See http://www.galasoft.ch/mvvm
    /// </para>
    /// </summary>
    public class MainViewModel : ViewModelBase
    {
        protected virtual ストップウォッチ モデル { get; set; }

        private TimeSpan _表示時間;
        public TimeSpan 表示時間
        {
            get
            {
                return _表示時間;
            }
            private set
            {
                Set(() => 表示時間, ref _表示時間, value);
            }
        }

        

        public ICommand 更新する { get; private set; }
        public ICommand 開始する { get; private set; }
        public ICommand 停止する { get; private set; }

        /// <summary>
        /// Initializes a new instance of the MainViewModel class.
        /// </summary>
        public MainViewModel()
        {
            モデル = new ストップウォッチ();

            更新する = new RelayCommand(
                () => 表示時間 = モデル.経過時間);

            開始する = new RelayCommand(
                () => モデル.開始する(),
                () => !モデル.動作中);

            停止する = new RelayCommand(
                () => モデル.停止する(),
                () => モデル.動作中);

            モデル.PropertyChanged +=
                (sender, e) =>
                    {
                        if (e.PropertyName == "動作中")
                        {
                            ((RelayCommand)開始する).RaiseCanExecuteChanged();
                            ((RelayCommand)停止する).RaiseCanExecuteChanged();
                        }
                    };

            ////if (IsInDesignMode)
            ////{
            ////    // Code runs in Blend --> create design time data.
            ////}
            ////else
            ////{
            ////    // Code runs "for real"
            ////}
        }
    }
}